home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Plus / Multimedia Plus with ClearVue Version 10-94 (Knowledge Media Inc.).ISO / dos / anim / flilib / flisrc / unbrun.asm < prev    next >
Assembly Source File  |  1989-11-10  |  2KB  |  80 lines

  1. ;fii_unbrun.asm - low level routine to uncompress 1st frame of a FLI
  2.  
  3.     TITLE   ubrun
  4.  
  5. _TEXT    SEGMENT  BYTE PUBLIC 'CODE'
  6. _TEXT    ENDS
  7. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  8. _DATA    ENDS
  9. CONST    SEGMENT  WORD PUBLIC 'CONST'
  10. CONST    ENDS
  11. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  12. _BSS    ENDS
  13. DGROUP    GROUP    CONST,    _BSS,    _DATA
  14.     ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  15.  
  16. _TEXT      SEGMENT
  17.     PUBLIC _fii_unbrun
  18.     ;fii_unbrun_(cbuf, screen, linect)
  19. _fii_unbrun PROC far
  20. linect equ word ptr[bp+12+2]
  21.     ;save the world and set the basepage
  22.     push bp
  23.     mov bp,sp
  24.     sub sp,4
  25.     push es
  26.     push ds
  27.     push si
  28.     push di
  29.     push bx
  30.     push cx
  31.  
  32.     cld    ;clear direction flag in case Aztec or someone mucks with it.
  33.  
  34.     lds si,[bp+4+2]
  35.     les di,[bp+8+2]
  36.     mov    dx,di    ;keep pointer to start of line in dx
  37.     xor    ah,ah    ;clear hi bit of ah cause lots of unsigned uses to follow
  38. linelp:
  39.     mov    di,dx
  40.     lodsb        ;get op count for this line
  41.     mov bl,al  
  42.     test bl,bl
  43.     jmp endulcloop
  44. ulcloop:
  45.     lodsb    ; load op/count
  46.     test al,al
  47.     js ucopy
  48.     mov cx,ax ;move count to cx
  49.     lodsb      ;value to repeat in al
  50.     rep stosb ;store same value again and again...
  51.     dec bl      ;through with this line yet????
  52.     jnz ulcloop
  53.     jmp ulcout
  54. ucopy:
  55.     neg al
  56.     mov cx,ax ;get sign  correctec copy count
  57.     rep movsb 
  58.     dec bl
  59. endulcloop:
  60.     jnz ulcloop
  61. ulcout:            ;advance to next line...
  62.     add    dx,320
  63.     dec linect
  64.     jnz    linelp
  65.  
  66.     pop cx
  67.     pop bx
  68.     pop di
  69.     pop si
  70.     pop ds
  71.     pop es
  72.     mov    sp,bp
  73.     pop    bp
  74.     ret    
  75.  
  76. _fii_unbrun ENDP
  77.  
  78. _TEXT    ENDS
  79. END
  80.